<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <my-parent></my-parent>
  </div>
</body>
<template id="parent">
  <div>
    <h1>父组件</h1>
    <!-- 1. -->
    <my-child str="哈哈" :num="100" :flag="true" :msg="msg" :obj="{ val: 1000 }" :arr="['a', 'b', 'c']"/>
  </div>
</template>
<template id="child">
  <div>
    <h4>子组件</h4>
    <ul>
      <li>{{ str }}</li>
      <li>{{ num }}</li>
      <li>{{ flag }}</li>
      <li>{{ msg }}</li>
      <li>{{ obj }}</li>
      <li>{{ arr }}</li>
    </ul>
  </div>
</template>
<script src="lib/vue.js"></script>
<script>
  /**
    1.父组件在调用子组件的地方，添加自定义的属性, 属性的值就是传递给子组件的值
      如果属性的值是变量，boolean,number类型，对象，数组，null，undefined，
      需要使用绑定属性
  */

  // 2.在子组件定义的地方，添加一个props选项，有三种写法
  // 2.1 props 的值为数组，数组的元素为 之前定义的属性名
  // 2.2 props 的值为对象，key值为自定义的属性名，value值为数据类型

  // 在子组件的模版中可以通过 自定义的属性名 渲染数据
  const Child = {
    // props: ['str', 'num', 'flag', 'msg', 'obj', 'arr'],
    props: {
      str: String,
      num: Number, // 更改为 String 查看控制台信息 --- 警告信息
      flag: Boolean,
      msg: String,
      obj: Object,
      arr: Array
    },
    template: '#child'
  }
  const Parent = {
    template: '#parent',
    data () {
      return {
        msg: 'hello val'
      }
    },
    components: {
      MyChild: Child
    }
  }

  new Vue({
    el: '#app',
    components: {
      MyParent: Parent
    }
  })
</script>
</html>